Composition Revision示例
本教程讨论 CompositionRevisions 如何工作以及如何管理复合资源(XR)更新。 本教程从定义了 “MyVPC “资源的 “Composition “和 “CompositeResourceDefinition”(XRD)开始,然后创建多个 XR 以观察不同的升级路径。 每次更新 Composition 时,crossplane 都会为创建的复合资源分配不同的 CompositionRevisions。
准备工作
安装 crossplane
安装 Crossplane v1.11.0 或更高版本,并等待 Crossplane pod 运行。
1kubectl create namespace crossplane-system
2helm repo add crossplane-master https://charts.crossplane.io/master/
3helm repo update
4helm install crossplane --namespace crossplane-system crossplane-master/crossplane --devel --version 1.11.0-rc.0.108.g0521c32e
5kubectl get pods -n crossplane-system
预期产出:
1NAME READY STATUS RESTARTS AGE
2crossplane-7f75ddcc46-f4d2z 1/1 Running 0 9s
3crossplane-rbac-manager-78bd597746-sdv6w 1/1 Running 0 9s
部署composition和 XRD 示例
应用示例 Composition。
1apiVersion: apiextensions.crossplane.io/v1
2kind: Composition
3metadata:
4 labels:
5 channel: dev
6 name: myvpcs.aws.example.upbound.io
7spec:
8 writeConnectionSecretsToNamespace: crossplane-system
9 compositeTypeRef:
10 apiVersion: aws.example.upbound.io/v1alpha1
11 kind: MyVPC
12 resources:
13 - base:
14 apiVersion: ec2.aws.upbound.io/v1beta1
15 kind: VPC
16 spec:
17 forProvider:
18 region: us-west-1
19 cidrBlock: 192.168.0.0/16
20 enableDnsSupport: true
21 enableDnsHostnames: true
22 name: my-vcp
应用 XRD 示例。
1apiVersion: apiextensions.crossplane.io/v1
2kind: CompositeResourceDefinition
3metadata:
4 name: myvpcs.aws.example.upbound.io
5spec:
6 group: aws.example.upbound.io
7 names:
8 kind: MyVPC
9 plural: myvpcs
10 versions:
11 - name: v1alpha1
12 served: true
13 referenceable: true
14 schema:
15 openAPIV3Schema:
16 type: object
17 properties:
18 spec:
19 type: object
20 properties:
21 id:
22 type: string
23 description: ID of this VPC that other objects will use to refer to it.
24 required:
25 - id
验证 Crossplane 是否创建了 Composition 修订版
1kubectl get compositionrevisions -o="custom-columns=NAME:.metadata.name,REVISION:.spec.revision,CHANNEL:.metadata.labels.channel"
预期产出:
dev
会自动从 Composition 中创建。
创建 Composition 资源
本教程有四个复合资源,涵盖不同的更新策略和composition物选择选项。 默认行为是将 XR 更新到composition物的最新修订版。 不过,可以通过在 XR 中设置 compositionUpdatePolicy: Manual
来更改。也可以使用 compositionRevisionSelector.matchLabels
和 compositionUpdatePolicy: Automatic
来选择带有特定标签的最新修订版。
默认更新策略
创建的 XR 未定义 “compositionUpdatePolicy”(组件更新策略)。 更新策略默认为 “Automatic”(自动):
1apiVersion: aws.example.upbound.io/v1alpha1
2kind: MyVPC
3metadata:
4 name: vpc-auto
5spec:
6 id: vpc-auto
预期产出:
1myvpc.aws.example.upbound.io/vpc-auto created
手动更新政策
使用 compositionUpdatePolicy: Manual
和 compositionRevisionRef
创建 Composition 资源。
1apiVersion: aws.example.upbound.io/v1alpha1
2kind: MyVPC
3metadata:
4 name: vpc-man
5spec:
6 id: vpc-man
7 compositionUpdatePolicy: Manual
8 compositionRevisionRef:
9 name: myvpcs.aws.example.upbound.io-ad265bc
预期产出:
1myvpc.aws.example.upbound.io/vpc-man created
使用选择器
创建一个 XR,其 compositionRevisionSelector
为 channel: dev
:
1apiVersion: aws.example.upbound.io/v1alpha1
2kind: MyVPC
3metadata:
4 name: vpc-dev
5spec:
6 id: vpc-dev
7 compositionRevisionSelector:
8 matchLabels:
9 channel: dev
预期产出:
1myvpc.aws.example.upbound.io/vpc-dev created
创建一个 XR,其 compositionRevisionSelector
为 channel: staging
:
1apiVersion: aws.example.upbound.io/v1alpha1
2kind: MyVPC
3metadata:
4 name: vpc-staging
5spec:
6 id: vpc-staging
7 compositionRevisionSelector:
8 matchLabels:
9 channel: staging
预期产出:
1myvpc.aws.example.upbound.io/vpc-staging created
验证标签为 “channel: staging “的composition资源没有 “REVISION”。 所有其他 XRs 的 “REVISION “都与创建的composition修订版相匹配。
1kubectl get composite -o="custom-columns=NAME:.metadata.name,SYNCED:.status.conditions[0].status,REVISION:.spec.compositionRevisionRef.name,POLICY:.spec.compositionUpdatePolicy,MATCHLABEL:.spec.compositionRevisionSelector.matchLabels"
预期产出:
1NAME SYNCED REVISION POLICY MATCHLABEL
2vpc-auto True myvpcs.aws.example.upbound.io-ad265bc Automatic <none>
3vpc-dev True myvpcs.aws.example.upbound.io-ad265bc Automatic map[channel:dev]
4vpc-man True myvpcs.aws.example.upbound.io-ad265bc Manual <none>
5vpc-staging False <none> Automatic map[channel:staging]
创建新的 Composition Revisions
当创建或更新 Composition 时,crossplane 会创建一个新的 CompositionRevision。 标签和 Annotations 的更改也会触发一个新的 CompositionRevision。
更新 Composition 标签
将 “Composition “标签更新为 “channel: staging”:
1kubectl label composition myvpcs.aws.example.upbound.io channel=staging --overwrite
预期产出:
1composition.apiextensions.crossplane.io/myvpcs.aws.example.upbound.io labeled
验证 Crossplane 是否创建了新的 Composition 修订版本:
1kubectl get compositionrevisions -o="custom-columns=NAME:.metadata.name,REVISION:.spec.revision,CHANNEL:.metadata.labels.channel"
预期产出:
1NAME REVISION CHANNEL
2myvpcs.aws.example.upbound.io-727b3c8 2 staging
3myvpcs.aws.example.upbound.io-ad265bc 1 dev
验证 crossplane 是否将 Composition 资源 vpc-auto
和 vpc-staging
分配给 Composition revision:2,XRs vpc-man
和 vpc-dev
仍分配给原来的 revision:1:
1kubectl get composite -o="custom-columns=NAME:.metadata.name,SYNCED:.status.conditions[0].status,REVISION:.spec.compositionRevisionRef.name,POLICY:.spec.compositionUpdatePolicy,MATCHLABEL:.spec.compositionRevisionSelector.matchLabels"
预期产出:
1NAME SYNCED REVISION POLICY MATCHLABEL
2vpc-auto True myvpcs.aws.example.upbound.io-727b3c8 Automatic <none>
3vpc-dev True myvpcs.aws.example.upbound.io-ad265bc Automatic map[channel:dev]
4vpc-man True myvpcs.aws.example.upbound.io-ad265bc Manual <none>
5vpc-staging True myvpcs.aws.example.upbound.io-727b3c8 Automatic map[channel:staging]
vpc-auto
总是使用最新的 Revision。 vpc-staging
现在与被引用到 Revision revision:2 的标签相匹配。
更新成分规格和标签
更新 Composition 以禁用 VPC 中的 DNS 支持,并将标签从 “staging “改回 “dev”。
应用以下更改更新 “Composition “规格和标签:
1apiVersion: apiextensions.crossplane.io/v1
2kind: Composition
3metadata:
4 labels:
5 channel: dev
6 name: myvpcs.aws.example.upbound.io
7spec:
8 writeConnectionSecretsToNamespace: crossplane-system
9 compositeTypeRef:
10 apiVersion: aws.example.upbound.io/v1alpha1
11 kind: MyVPC
12 resources:
13 - base:
14 apiVersion: ec2.aws.upbound.io/v1beta1
15 kind: VPC
16 spec:
17 forProvider:
18 region: us-west-1
19 cidrBlock: 192.168.0.0/16
20 enableDnsSupport: false
21 enableDnsHostnames: true
22 name: my-vcp
预期产出:
1composition.apiextensions.crossplane.io/myvpcs.aws.example.upbound.io configured
验证 Crossplane 是否创建了新的 Composition 修订版本:
1kubectl get compositionrevisions -o="custom-columns=NAME:.metadata.name,REVISION:.spec.revision,CHANNEL:.metadata.labels.channel"
预期产出:
1NAME REVISION CHANNEL
2myvpcs.aws.example.upbound.io-727b3c8 2 staging
3myvpcs.aws.example.upbound.io-ad265bc 1 dev
4myvpcs.aws.example.upbound.io-f81c553 3 dev
dev
频道至关重要。
验证 crossplane 是否将 Composition 资源 vpc-auto
和 vpc-dev
分配给 Composition 修订版本:3。vpc-staging
分配给修订版本:2,vpc-man
仍分配给原来的修订版本:1:
1kubectl get composite -o="custom-columns=NAME:.metadata.name,SYNCED:.status.conditions[0].status,REVISION:.spec.compositionRevisionRef.name,POLICY:.spec.compositionUpdatePolicy,MATCHLABEL:.spec.compositionRevisionSelector.matchLabels"
预期产出:
1NAME SYNCED REVISION POLICY MATCHLABEL
2vpc-auto True myvpcs.aws.example.upbound.io-f81c553 Automatic <none>
3vpc-dev True myvpcs.aws.example.upbound.io-f81c553 Automatic map[channel:dev]
4vpc-man True myvpcs.aws.example.upbound.io-ad265bc Manual <none>
5vpc-staging True myvpcs.aws.example.upbound.io-727b3c8 Automatic map[channel:staging]
vpc-dev
与应用于修订版本 3 的更新标签相匹配。 vpc-staging
与应用于修订版本 2 的标签相匹配。